﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;

namespace RS.Echarts.Models
{
    /// <summary>
    /// 表示选择器按钮的文本标签样式配置类。
    /// </summary>
    public class SelectorLabel
    {
        /// <summary>
        /// 是否显示文本标签，默认为true，表示显示。
        /// </summary>
        public bool Show { get; set; } = true;

        /// <summary>
        /// 文本标签与选择器按钮之间的距离，单位为像素，用于调整文本标签与按钮的相对位置。
        /// 例如，设置为5表示文本标签与按钮之间的距离为5像素。
        /// </summary>
        public int Distance { get; set; }

        /// <summary>
        /// 文本标签的旋转角度，单位为度，用于设置文本标签的旋转方向和角度。
        /// 例如，设置为90表示文本标签顺时针旋转90度。
        /// </summary>
        public int Rotate { get; set; }

        /// <summary>
        /// 文本标签的偏移量，单位为像素，可以是一个数字表示水平和垂直方向相同的偏移量，也可以是一个包含两个数字的数组，分别表示水平和垂直方向的偏移量。
        /// 例如，设置为[5, 0]表示文本标签在水平方向向右偏移5像素，垂直方向不偏移。
        /// </summary>
        public object Offset { get; set; }

        /// <summary>
        /// 文本标签的颜色，用于设置文本标签的字体颜色。
        /// 支持多种颜色表示方式，如十六进制颜色码（例如 "#FF0000" 表示红色）、RGB函数（例如 "rgb(255, 0, 0)"）、RGBA函数（例如 "rgba(255, 0, 0, 0.5)"）等。
        /// </summary>
        public Color Color { get; set; }

        /// <summary>
        /// 文本标签的字体风格，可选值为'normal'（正常）、'italic'（斜体）、'oblique'（倾斜），用于设置文本标签的字体样式。
        /// </summary>
        public string FontStyle { get; set; } = "normal";

        /// <summary>
        /// 文本标签的字体粗细，可选值为'normal'（正常）、'bold'（加粗）、'bolder'（更粗）、'lighter'（更细）或具体的数值（如100、200等），用于设置文本标签的字体粗细程度。
        /// </summary>
        public string FontWeight { get; set; } = "normal";

        /// <summary>
        /// 文本标签的字体系列，例如'sans-serif'（无衬线字体）、'serif'（衬线字体）、'monospace'（等宽字体）、'Arial'、'Courier New'、'Microsoft YaHei'等，用于指定文本标签的字体类型。
        /// </summary>
        public string FontFamily { get; set; } = "sans-serif";

        /// <summary>
        /// 文本标签的字体大小，单位为像素，用于设置文本标签的字体大小。
        /// 例如，设置为12表示字体大小为12像素。
        /// </summary>
        public int FontSize { get; set; } = 12;

        /// <summary>
        /// 文本标签的水平对齐方式，可选值为'left'（左对齐）、'right'（右对齐）、'center'（居中对齐），用于设置文本标签在水平方向的对齐方式。
        /// </summary>
        public string Align { get; set; } = "left";

        /// <summary>
        /// 文本标签的垂直对齐方式，可选值为'top'（顶部对齐）、'middle'（居中对齐）、'bottom'（底部对齐），用于设置文本标签在垂直方向的对齐方式。
        /// </summary>
        public string VerticalAlign { get; set; } = "middle";

        /// <summary>
        /// 文本标签的行高，单位为像素，用于设置文本标签的行间距。
        /// 例如，设置为20表示行高为20像素。
        /// </summary>
        public int LineHeight { get; set; }

        /// <summary>
        /// 文本标签的背景色，用于设置文本标签的背景颜色。
        /// 支持多种颜色表示方式，如十六进制颜色码（例如 "#FFFFFF" 表示白色）、RGB函数（例如 "rgb(255, 255, 255)"）、RGBA函数（例如 "rgba(255, 255, 255, 0.8)"）等。
        /// </summary>
        public Color BackgroundColor { get; set; }

        /// <summary>
        /// 文本标签的边框颜色，用于设置文本标签边框的颜色。
        /// 支持的颜色格式与BackgroundColor属性相同，例如 "#000000" 表示黑色边框等。
        /// </summary>
        public Color BorderColor { get; set; }

        /// <summary>
        /// 文本标签的边框宽度，单位为像素，设置文本标签边框的粗细程度。
        /// 例如，设置为1表示边框宽度为1像素，设置为2则边框更粗，宽度为2像素等。
        /// </summary>
        public int BorderWidth { get; set; }

        /// <summary>
        /// 文本标签的边框类型，可选值为'solid'（实线）、'dashed'（虚线）、'dotted'（点线），用于定义文本标签边框线的样式。
        /// </summary>
        public string BorderType { get; set; } = "solid";

        /// <summary>
        /// 文本标签边框虚线偏移量，在边框类型为虚线（'dashed'）或点线（'dotted'）时，用于设置虚线的起始偏移位置，单位为像素。
        /// </summary>
        public int BorderDashOffset { get; set; }

        /// <summary>
        /// 文本标签的圆角半径，单位为像素，用于设置文本标签的圆角程度。
        /// 可以是一个数字，表示四个角相同的圆角半径；也可以是一个包含四个数字的数组，分别表示左上角、右上角、右下角、左下角的圆角半径，例如 [5, 5, 0, 0] 表示左上角和右上角为圆角半径5像素，右下角和左下角为直角。
        /// </summary>
        public int[] BorderRadius { get; set; }

        /// <summary>
        /// 文本标签的内边距，单位为像素，可以是一个数字表示四个方向相同的内边距，也可以是一个包含四个数字的数组，分别表示上、右、下、左的内边距。
        /// 例如，设置为[5, 10, 5, 10]表示文本标签上内边距为5像素，右内边距为10像素，下内边距为5像素，左内边距为10像素。
        /// </summary>
        public int[] Padding { get; set; }

        /// <summary>
        /// 文本标签阴影的模糊大小，用于设置文本标签阴影的模糊程度，数值越大阴影越模糊，单位为像素。
        /// 需同时结合ShadowColor、ShadowOffsetX和ShadowOffsetY等属性来完整呈现阴影效果。
        /// </summary>
        public int ShadowBlur { get; set; }

        /// <summary>
        /// 文本标签阴影颜色，用于设置文本标签阴影的颜色，支持的颜色格式与Color属性相同。
        /// 注意：此配置项生效的前提是，设置了相应的显示条件（如Show为true等）。
        /// </summary>
        public Color ShadowColor { get; set; }

        /// <summary>
        /// 文本标签阴影水平方向上的偏移距离，以像素为单位，正值表示阴影向右偏移，负值表示向左偏移，用于控制文本标签阴影在水平方向的位置。
        /// 注意：此配置项生效的前提是，设置了相应的显示条件（如Show为true等）。
        /// </summary>
        public int ShadowOffsetX { get; set; }

        /// <summary>
        /// 文本标签阴影垂直方向上的偏移距离，以像素为单位，正值表示阴影向下偏移，负值表示向上偏移，用于控制文本标签阴影在垂直方向的位置。
        /// 注意：此配置项生效的前提是，设置了相应的显示条件（如Show为true等）。
        /// </summary>
        public int ShadowOffsetY { get; set; }

        /// <summary>
        /// 文本标签的宽度，单位为像素，用于设置文本标签的最大宽度。
        /// 如果文本内容超过此宽度，可能会根据其他配置（如Overflow属性）进行处理，例如换行或截断等。
        /// </summary>
        public int Width { get; set; }

        /// <summary>
        /// 文本标签的高度，单位为像素，用于设置文本标签的最大高度。
        /// 如果文本内容超过此高度，可能会根据其他配置（如Overflow属性）进行处理，例如截断等。
        /// </summary>
        public int Height { get; set; }

        /// <summary>
        /// 文本标签文字本身的描边颜色，用于设置文本标签文字的描边颜色。
        /// 支持的颜色格式与Color属性相同，例如 "#000000" 表示黑色描边等。
        /// </summary>
        public Color TextBorderColor { get; set; }

        /// <summary>
        /// 文本标签文字本身的描边宽度，单位为像素，设置文本标签文字描边的粗细程度。
        /// 例如，设置为1表示文字描边宽度为1像素。
        /// </summary>
        public int TextBorderWidth { get; set; }

        /// <summary>
        /// 文本标签文字本身的描边类型，可选值为'solid'（实线）、'dashed'（虚线）、'dotted'（点线），用于定义文本标签文字描边线的样式。
        /// </summary>
        public string TextBorderType { get; set; } = "solid";

        /// <summary>
        /// 文本标签文字本身的描边虚线偏移量，在文字描边类型为虚线（'dashed'）或点线（'dotted'）时，用于设置虚线的起始偏移位置，单位为像素。
        /// </summary>
        public int TextBorderDashOffset { get; set; }

        /// <summary>
        /// 文本标签文字本身的阴影颜色，用于设置文本标签文字阴影的颜色，支持的颜色格式与Color属性相同。
        /// 注意：此配置项生效的前提是，设置了相应的显示条件（如Show为true等）。
        /// </summary>
        public Color TextShadowColor { get; set; }

        /// <summary>
        /// 文本标签文字本身的阴影模糊大小，用于设置文本标签文字阴影的模糊程度，数值越大阴影越模糊，单位为像素。
        /// 注意：此配置项生效的前提是，设置了相应的显示条件（如Show为true等）。
        /// </summary>
        public int TextShadowBlur { get; set; }

        /// <summary>
        /// 文本标签文字本身的阴影水平方向上的偏移距离，以像素为单位，正值表示阴影向右偏移，负值表示向左偏移，用于控制文本标签文字阴影在水平方向的位置。
        /// 注意：此配置项生效的前提是，设置了相应的显示条件（如Show为true等）。
        /// </summary>
        public int TextShadowOffsetX { get; set; }

        /// <summary>
        /// 文本标签文字本身的阴影垂直方向上的偏移距离，以像素为单位，正值表示阴影向下偏移，负值表示向上偏移，用于控制文本标签文字阴影在垂直方向的位置。
        /// 注意：此配置项生效的前提是，设置了相应的显示条件（如Show为true等）。
        /// </summary>
        public int TextShadowOffsetY { get; set; }

        /// <summary>
        /// 文本标签文字超出宽度是否截断或者换行，配置width时有效，可选值为'truncate'（截断并显示ellipsis配置的文本）、'break'（换行）、'breakAll'（换行，在英语等拉丁文中还会强制单词内换行）。
        /// </summary>
        public string Overflow { get; set; } = "none";

        /// <summary>
        /// 在overflow配置为'truncate'时，可配置末尾显示的文本，默认为'...'，用于表示截断的文本内容。
        /// </summary>
        public string Ellipsis { get; set; } = "...";

        /// <summary>
        /// 富文本样式自定义，以键值对的形式存储不同样式的文本配置，用于实现更复杂的文本样式效果。
        /// 例如，可以为不同的文本部分设置不同的字体、颜色、大小等样式。
        /// </summary>
        public Dictionary<string, TextStyle> Rich { get; set; } = new Dictionary<string, TextStyle>();
    }
}
